package graduation.controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import graduation.entity.Files;
import graduation.service.FilesService;
import graduation.utils.FileUtilt;
import graduation.utils.ResultVOUtil;
import graduation.vo.PageVO;
import graduation.vo.ResultVO;

@Controller
@RequestMapping("/files")
public class FilesController {

	@Autowired
	private FilesService filesServiceImpl;

	/**
	 * 上传文件
	 * 
	 * @param type
	 * @param fileName
	 * @param uploadDate
	 * @param file
	 * @return
	 */
	@RequestMapping(value = "uploadFiles", method = RequestMethod.POST)
	@ResponseBody
	public ResultVO uploadFiles(int type, String fileName, MultipartFile file, HttpServletRequest request) {
		Files files = new Files();
		/// 文件原始名称（上传前的名字）
		String originalFileName = file.getOriginalFilename();
		// 图片到服务器的名称
		String urlFileName = String.valueOf(new Date().getTime()) + originalFileName;
		// 图片上传地址的地址
		String leftPath = request.getSession().getServletContext().getRealPath("/Files/");
		String fileUrl = "graduation" + "/attachments/" + urlFileName;
		// 文件上传
		try {
			FileUtilt.uploadFile(file.getBytes(), leftPath, urlFileName);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String filesId = UUID.randomUUID().toString();
		filesId = filesId.replace("-", "");

		files.setId(filesId);
		files.setFileName(fileName);
		files.setFileUrl(fileUrl);
		files.setType(type);
		files.setUploadDate(new Date());
		// 保存到数据库
		filesServiceImpl.uploadFiles(files);
		return ResultVOUtil.success(files);
	}

	/**
	 * 根据文件id删除，参数是由文件id组成的数组，实现批量删除
	 * 
	 * @param filesIds
	 * @return
	 */
	@RequestMapping(value = "delFiles")
	@ResponseBody
	public ResultVO delFiles(@RequestBody Map<String, Object> map, HttpServletRequest request) {
		List<String> list = (List) map.get("filesIds");
		System.out.println(list);
		// 图片保存地址
		String leftPath = request.getSession().getServletContext().getRealPath("/Files/");
		// 遍歷list
		for (String filesId : list) {
			Files files = filesServiceImpl.getFilesById(filesId);

			// 删除数据库
			filesServiceImpl.delFiles(files);
			// 删除磁盘中文件
			try {
				FileUtilt.DeleteFile(leftPath, files.getFileUrl().substring(files.getFileUrl().lastIndexOf("/") + 1));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

		return ResultVOUtil.success("删除成功");
	}

	/**
	 * 根据文件名模糊查找
	 * 
	 * @param filesName
	 * @return
	 */
	@RequestMapping(value = "findFileByName", method = RequestMethod.GET)
	@ResponseBody
	public ResultVO findFileByName(String filesName, int type) {
		// 查询数据库
		List list = filesServiceImpl.findFileByName(filesName, type);
		if (list.isEmpty()) {
			return ResultVOUtil.fail("查询无果");
		}
		return ResultVOUtil.success(list);
	}

	// /**
	// * 按照上传最新时间排序，参数page，size实现分页功能
	// * @param page
	// * @param size
	// * @return
	// */
	// @RequestMapping(value="getFiles",method=RequestMethod.GET)
	// @ResponseBody
	// public ResultVO getFiles(@RequestParam("page") int
	// page,@RequestParam("size") int size){
	// //查询数据库
	// PageVO pageMessage = filesServiceImpl.getFiles(page,size);
	// if(pageMessage.getList().isEmpty()){
	// return ResultVOUtil.fail("查询无果");
	// }
	// return ResultVOUtil.success(pageMessage);
	// }
	// /**
	// * 根据type获取文件
	// * @param type
	// * @return
	// */
	// @RequestMapping(value="getFilesByType",method=RequestMethod.GET)
	// @ResponseBody
	// public ResultVO getFilesByType(@RequestParam("type") int type){
	// //查询数据库
	// List list = filesServiceImpl.getFilesByType(type);
	// if(list.isEmpty()){
	// return ResultVOUtil.fail("查询无果");
	// }
	// return ResultVOUtil.success(list);
	// }
	/**
	 * 按照上传最新时间排序，参数page，size实现分页功能
	 * 
	 * @param page
	 * @param size
	 * @return
	 */
	@RequestMapping(value = "getFiles", method = RequestMethod.GET)
	@ResponseBody
	public ResultVO getFiles(int page, int size, int type) {
		// 查询数据库
		PageVO pageMessage = filesServiceImpl.getFiles(page, size, type);
		if (pageMessage.getList().isEmpty()) {
			return ResultVOUtil.fail("查询无果");
		}
		return ResultVOUtil.success(pageMessage);
	}
}
